import { Interceptors } from "./request"; // 引入自定义的axios拦截器模块

/**
 * HttpServer类，用于封装axios实例并提供简化版的HTTP请求方法。
 */
export class HttpServer {
    constructor() {
        this.axios = new Interceptors().getInterceptors();
    }

    /**
     * 内部方法，为传入的请求配置添加默认值，主要是设置'duplicateRequestValidation'为true。
     * @param config 请求的原始配置对象
     * @returns 带有默认配置的请求配置对象
     */
    requestWithDefaults(config) {
        const defaultConfig = {
            duplicateRequestValidation: true, // 设置默认值
        };
        return { ...defaultConfig, ...config };
    }

    /**
     * 通用请求方法，处理所有类型的HTTP请求。
     * @param config 请求配置对象，会应用默认配置
     * @returns AxiosPromise，表示异步请求的Promise
     */
    request(config) {
        return this.axios.request(this.requestWithDefaults(config));
    }

    // 以下为简化版的HTTP方法，直接调用request方法并设定method
    post(config) {
        return this.request({ ...config, method: "post" });
    }

    get(config) {
        return this.request({ ...config, method: "get" });
    }

    delete(config) {
        return this.request({ ...config, method: "delete" });
    }

    put(config) {
        return this.request({ ...config, method: "put" });
    }

    patch(config) {
        return this.request({ ...config, method: "patch" });
    }
}

// 实例化HttpServer并导出，便于其他模块使用
const http = new HttpServer();
export default http;
